<script>
  import {mapGetters, mapActions} from 'vuex'
  import goShare from '@/mixins/goShare'

  /**
   * 流程：
   * 1. 获取shareUrl、sharePageUrl （步骤6使用）
   * 2. 获取定位 （如果定位失败且scopeId有值也可前往步骤4）【定位信息location存入store】
   * 3. 用定位换取scopeId、附近门店信息，【将scopeId存入store，附近门店信息nearestChain存入store】
   * 4. wx.login获取code
   * 5. 请求接口换取用户信息，判断是否绑定过手机号
   *    1）绑定过：拿到信息和openid 【userInfo、openId存入store】
   *    2）没绑定过：【首页界面显示未登录样式，openId存入store】
   *        a）用户点击首页的任何元素都会跳转到 绑定手机号界面
   *        b）绑定过后 【userInfo存入store】，跳步骤6
   * 6. 判断是否有shareUrl/sharePageUrl来看是否要自动打开webview/其他小程序页面
   *
   * 注1：有两种情况会有shareUrl：用户在小程序内分享webview里的页面；h5登录失效
   * 注2：sharePageUrl是分享原生小程序页面的路径
   * 注3：分享的小程序页面都是pages/index/main,
   *      然后具体要跳转的页面是shareUrl、sharePageUrl拼在路由里，
   *      这么做是因为始终保持有个首页的历史记录存在（即 用户从分享的页面能返回到首页），
   *      所以获取shareUrl、sharePageUrl的逻辑写在了pages/index的onLoad里
   */
  export default {
    mixins: [goShare],
    data() {
      return {
        code: '',
        hasError: false,
        systemInfo: ""
      }
    },
    computed: {
      ...mapGetters(['location', 'scopeId', 'locationCopy','wxID', 'shareUrl', 'userInfo', 'sharePageUrl', 'openId'])
    },
    watch: {
      location (newVal, oldVal) {
        if (!newVal || !oldVal) {
          return
        }
        console.log('定位修改，重新获取运营范围')
        wx.showLoading({
          title: '正在重新获取运营范围',
        })
        this.getScopeId()
      }
    },
    methods: {
      ...mapActions(['updateAppSetting', 'getLoginCode', 'getUserInfo', 'login', 'getAddress']),
      //  应用更新机制
      checkUpdate() {
        const updateManager = wx.getUpdateManager()

        updateManager.onCheckForUpdate((res) => {
          // 请求完新版本信息的回调
          console.log('是否有新版本：', res.hasUpdate)
        })
        updateManager.onUpdateReady(() => {
          wx.showModal({
            title: '更新提示',
            content: '新版本已经准备好，是否重启应用？',
            success: (res) => {
              if (res.confirm) {
                // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                updateManager.applyUpdate()
              }
            }
          })
        })
        updateManager.onUpdateFailed(() => {
          // 新版本下载失败
          // console.log('新版本下载失败')
        })
      },
      //  定位
      getLocation() {
        console.log('发起定位')
        this.hasError = false

        if (this.location) {
          console.log('已有定位信息 直接获取scopeId和附近门店')
          wx.showLoading({
            title: '定位中',
          })
          this.getScopeId()
          return
        }

        wx.showLoading({
          title: '定位中',
        })
        wx.getLocation({
          type: 'gcj02',
          success: (res) => {
            // res = {
            //   latitude: 22.5428600000,
            //   longitude: 114.0595600000
            // }

            this.hasError = false
            this.updateAppSetting({
              location: res,
            })

            //  根据经纬度换取详细位置信息
            this.getAddress({
              ...res,
              success: (info) => {
                this.updateAppSetting({
                  locationDetailInfo: info,
                  addrName:this.$const.getAreaStr(info.address),
                })
                console.log(info)
                console.log('App拿取地理位置')
              },
              fail: (err) => {
                console.log('换取地址描述信息失败', err)
              }
            })

            //  获取ScopeId
            this.getScopeId()
          },
          fail: (err) => {
            wx.hideLoading()
            this.hasError = true
            console.log('定位失败:', err)

            if (err.errMsg.indexOf('auth') >= 0) {
              wx.showModal({
                title: '警告',
                content: '您拒绝了使用地理位置授权，将无法使用应用，是否重新授权？',
                success: (action) => {
                  if (action.confirm) {
                    wx.openSetting({
                      success: res => {
                        console.log('权限设置成功！', res)
                        if (res.authSetting["scope.userLocation"]) { // 如果用户重新同意了授权
                          this.getLocation()
                        }
                      },
                      fail: err => {
                      }
                    })
                  } else {
                    //  todo 退出小程序
                  }
                }
              })
            } else {
              wx.showModal({
                title: '提示',
                content: this.systemInfo,
                confirmText: '重试',
                success: (res) => {
                  if (res.confirm) {
                    this.getLocation()
                  }
                }
              })
            }
          }
        })
      },
      //  根据定位获取ScopeId、附近门店
      getScopeId () {
        console.log('获取ScopeId 和 附近门店')

        this.hasError = false
        // if (this.scopeId) {
        //   console.log('已有scopeId 直接获取code')
        //   this.getCode()
        //   return
        // }

        this.$api.getWxIdByLocation({
          latitude: this.location.latitude,
          longitude: this.location.longitude,
          wxId: this.wxID
        }).then(data => {
          wx.hideLoading()
          this.hasError = false

          let store = data.nearestChain || {}
          store.distance = data.distance || 0
          this.updateAppSetting({
            scopeId: data.scopeId || '',
            storeId: store.storeId || '',
            storeName: store.storeName || '',
            nearestChain: store,
            locationCopy: this.location
          //  保存
          })
          // this.getCode()
        }, err => {
          this.hasError = true
          wx.hideLoading()
          err.msg && wx.showModal({
            title: '提示',
            content: this.systemInfo,
            confirmText: '重试',
            success: (res) => {
              if (res.confirm) {
                this.getScopeId()
              }
            }
          })
        })
      },
      //  获取小程序登录code
      // getCode () {
      //   this.hasError = false
      //   this.login().then(data => {
      //     this.hasError = false
      //     this.goShareCondition('app')
      //   }, err => {
      //     this.hasError = true
      //   })
      // },
    },
    created() {

    },
    onLaunch() {
      this.checkUpdate()
      this.getLocation()
    },
    onShow() {
      let that = this
      wx.getSystemInfo({
        success:function(res){
          if (res.platform == "ios") {
            that.systemInfo = "无法获取你的位置信息。请到手机系统的「设置」—「隐私」—「定位服务」中打开定位服务，并允许微信使用定位服务。"
          } else if (res.platform == "android" || res.platform == "devtools") {
            that.systemInfo = "微信不能确定你的位置，你可以通过以下操作提高微信的定位精确度：在位置设置中打开GPS和无线网络。"
          }
        }

      })
      if (this.hasError) {
        console.log('流程存在失败，重新开始')
        this.getLocation()
      }
    }
  }
</script>

<style lang="scss" rel="stylesheet/scss">

</style>
